/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package scanner;

import Modele.Port;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author julien
 */
public class ScanneurTCP extends AbstractScanneur {

    /**
     * Socket de connexion du scanneur
     */
    private Socket socket = null;

    /**
     * Constructeur de la classe ScanneurTCP
     * @param sc Une référence vers un objet de type ScanneurClient
     * @param adresse L'addresse cible du scanneur
     * @param p Objet de type Port vers lequelle scanner 
     */
    public ScanneurTCP(ScanneurClient sc, String adresse, Port p) {
        super(sc, adresse, p);
    }

    /**
     * Ferme la connexion du socket
     * @return Vrai si la fermeture de la connexion s'est bien déroulé
     */
    public boolean closeConnection() {
        try {
            if (socket != null) {
                socket.close();
            }
        } catch (IOException ex) {
            Logger.getLogger(ScanneurTCP.class.getName()).log(Level.SEVERE, null, ex);
        }
        return true;
    }

    /**
     * Méthode run du thread.
     * Se connecte à un port TCP à l'addresse "adresse" puis ferme celle-ci.
     * Enfin, le thread s'efface de la liste de thread de l'objet ScanneurClient.
     */
    @Override
    public void run() {

        try {
            socket = new Socket(adresse, port.getNumPort());
            port.setStatut(Port.OUVERT);
        } catch (UnknownHostException ex) {
            port.setStatut(Port.FERME);
        } catch (IOException ex) {
            port.setStatut(Port.FERME);
        } finally {
            //pas touche
            if ((scanneurClient.isIntervalleScan() 
                    && port.getStatut() == Port.OUVERT) 
                    || !scanneurClient.isIntervalleScan()) {
                scanneurClient.ajouterNotification(port);
            }
            
            updateListThread();
            closeConnection();
        }

    }
}
